//package nancal.mp.config.base.feign
//
//import feign.Client
//import feign.Request
//import feign.Response
//import nbcp.base.comm.const
//import nbcp.base.extend.*
//import nbcp.base.extend.*

//
//class TraceFeignClientDecorator(private var delegate: Client) : Client {
//    override fun execute(request: Request, options: Request.Options): Response {
//        //请求前拦截
//
//        var res = delegate.execute(request, options)!!
//
//        //请求后拦截
//        var method = request.requestTemplate().methodMetadata().method()
//        var postAnn = method.getAnnotation(FeignResponseBodyDecoder::class.java)
//        if (postAnn == null) {
//            return res;
//        }
//
//        var postMethodName = postAnn.value.AsString(method.name + "_posted")
//
//        var postMethod = method.declaringClass.methods.firstOrNull { it.name == postMethodName };
//        if (postMethod == null) {
//            return res;
//        }
//
//        if (postMethod.IsStatic == false) {
//            throw RuntimeException("后置处理方法 ${postMethodName} 必须是静态方法")
//        }
//
//        var res2Body = postMethod.invoke(null, res.body().asReader(const.utf8).readText()).AsString()
//
//        var res2 = Response.builder()
//            .status(res.status())
//            .reason(res.reason())
//            .headers(res.headers())
//            .request(res.request())
//            .body(res2Body, const.utf8)
//            .build()
//        return res2;
//    }
//}